'''
在python中一切皆对象
1.类的定义
2.类的属性  类属性，实例属性，私有化
3.类的实例
4.类的方法  类方法（@classmethod）  静态方法（@staticmethod）
5.魔法方法
 __new__(为实例申请地址空间,需要返回该地址，不然不会执行初始化)
 __call__（当把实例当作函数来调用时触发该函数）
 __init__
 __del__   当一块空间没有任何的引用时
 __setter__  赋值时调用
 __getter__
__iter__
__str__     使用%s
__repr__   使用%r
6.类方法与类属性的转换 @property

特点
封装:本质是将事物相关的属性和方法封装在一个类里面，我们调用类创建实例的时候，不用关心类内部的代码细节
继承:子类需要复用父类里面的属性或者方法,当然子类也可以提供自己的属性和方法  super().__init()
多态：同一个方法不同对象调用同一个方法功能的表现形式不一样，
例如:a、不同的两个对象，字符串的加法和整数的加法，同样是加法，实现的功能是不一样的；
 b、这两个对象之间没有任何直接继承关系，但是所有对象的最终父类都是元类

 dir()  == __dict__
 mrco()  ==__mrco__
'''
from datetime import datetime
class Person:

    @property  #将bir方法设置为可读写的类属性
    def bir(self):
        return self.__bir
    @bir.setter
    def bir(self,value):
        self.__bir = value
    @property# 将age方法设置为只读类属性
    def age(self):
        return datetime.now().year - self.__bir

class Person(object):
    name = "x"
    def __int__(self,age):
        sekf.age = age
    def eat(self):
         print("%s在吃饭"%(self.name))

    def __init__(self):
        print('init')

    def __del__(self):
        print('销毁了。。。')



if __name__ == '__main__':
    # print(datetime.now().year)
    # per = Person()
    # per.bir=1994
    # print(per.bir)
    # print(per.age)
    import sys
    person = Person()
    print(Person.__dict__)
    person1 = person
    print(sys.getrefcount(person1))
    print('程序结束了....')